package com.ys.day27.p1线程池;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 描述: P1单线程池
 * Executors 使用它来创建队列
 * JAVA通过Executors提供了四种线程池，
 * 单线程化线程池(newSingleThreadExecutor)、
 * 可控最大并发数线程池(newFixedThreadPool)、
 * 可回收缓存线程池(newCachedThreadPool)、
 * 支持定时与周期性任务的线程池(newScheduledThreadPool)
 * @author CodeYang
 * @version 2021/1/6 11:12
 */
public class P1单线程化池化 {

    public static void main(String[] args) {
        ExecutorService service = Executors.newSingleThreadExecutor();
       // service.shutdown(); 提前关闭了 也会报 RejectedExecutionException REE
        for (int i = 0; i < 10; i++) {
            // 单线程注入执行 这是一个单线程池, 我们把 任务-这里叫做command 命令,动作,可以交给线程池帮我们去执行(我们不需要关注底层)
            service.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"执行");
                }
            });
            // 关闭线程池方法不能在循环体里面调用，否则抛出RejectedExecutionException(REE)异常 REE 拒接执行异常
            // 为什么会抛出这个异常？第一次执行循环体之后线程就关闭了，第二次再执行就会被拒绝
             //service.shutdown();
        }
        // 关闭线程池,建议在任务执行结束后关闭
    }
}
